import login_tool
import pymysql_tool

CONN = pymysql_tool.get_connection()
CUR = CONN.cursor()


def register():
    print("欢迎注册张成阳婚恋介绍所".center(50, '-'))
    name = input("请输入要注册的用户名：")
    # 判断用户是否存在
    n, res = select_user_with_name(name)
    if n != 0:
        print(f"已经存在名称为 {name} 的用户！！")
        return None

    # 用户不存在，表示是新用户
    pwd = input("请设置该用户的密码：")

    # 对密码进行md5加密
    pwd = login_tool.md5_pwd(pwd)

    user_email = input("请输入要注册的邮箱：")
    # 发送邮件
    # 随机生成验证码
    yzm = str(login_tool.rand_yzm())
    login_tool.send_email(user_email, yzm)
    user_yzm = input("请输入接收到的验证码：")
    if user_yzm == yzm:
        f1 = add_user(name, pwd, user_email)
        import time
        # 模拟注册所需要的时间
        time.sleep(3)
        if f1 == 1:
            print("用户注册成功！！")
        else:
            print("用户注册失败！！")


def login():
    print("-" * 50)
    print("欢迎登录张成阳婚恋介绍所".center(50, '-'))
    name = input("请输入您的姓名：")
    # 判断用户是否存在
    n, res = select_user_with_name(name)
    if n == 0:
        print(f"不存在名称为 {name} 的用户！！")
        return None

    # 判断该用户是否已经登录
    if get_user_login_status(name) != 0:
        print("该用户已经处于登录状态！！请勿重复登录！")
        return None

    # 用户不存在，表示是新用户
    pwd = input("请用户的密码：")
    pwd = login_tool.md5_pwd(pwd)

    if pwd != res[2]:
        print("您输入的密码不正确！！")
        return None

    user_email = input("请输入邮箱：")
    # 发送邮件
    # 随机生成验证码
    yzm = str(login_tool.rand_yzm())
    login_tool.send_email(user_email, yzm)
    user_yzm = input("请输入接收到的验证码：")
    if user_yzm == yzm:
        update_user_login_status(name, 1)
        import time
        # 模拟注册所需要的时间
        time.sleep(3)
        print("用户登录成功！！")


# def cancel():
#     print("-" * 50)
#     print("正处于注销页面".center(50, '-'))
#     name = input("请输入您的姓名：")
#     # 判断用户是否存在
#     all_user_dict = get_all_users()
#     # 用户存在就直接结束函数
#     if name not in all_user_dict:
#         print("该用户名还未注册，请先注册！")
#         return None
#     # TODO:自己在这里实现邮件验证码功能
#
#     # 从字典中将该用户移除
#     all_user_dict.pop(name)
#     f = open("data/user_info",'w',encoding='UTF-8')
#     users = list(all_user_dict.items())
#     n = 1
#     for user in users:
#         name = user[0]
#         d1 = user[1] # {'pwd':'123456','user_email':'1165872335@qq.com'}
#         pwd = d1['pwd']
#         user_email = d1['user_email']
#         if n==len(users):
#             f.write(f"{name},{pwd},{user_email}")
#         else:
#             f.write(f"{name},{pwd},{user_email}\n")
#         n+=1

# 根据用户的名称去mysql中判断用户是否存在
def select_user_with_name(n):

    # select * from users where name='小虎' or '1'='1'
    n = CUR.execute(f"select * from users where name=%s",[n]) # 解决sql注入的问题
    if n != 0:
        res = CUR.fetchone()
    else:
        res = None
    return n, res


def add_user(n, pd, email):
    n = CUR.execute(f"insert into users(name,password,email) values('{n}','{pd}','{email}')")
    CONN.commit()
    return n


def get_user_login_status(n):
    n = CUR.execute(f"select login_status from users where name='{n}'")
    res = CUR.fetchall()
    return res[0][0]


def update_user_login_status(n, f):
    CUR.execute(f"update users set login_status={f} where name='{n}'")
    CONN.commit()


def init():
    print("欢迎进入张成阳婚恋介绍所".center(50, '-'))
    print("1. 注册")
    print("2. 登录")
    print("3. 退出登录")
    print("-" * 50)
    choice1 = input("请输入您的选择：")
    if choice1 == '1':
        register()
    elif choice1 == '2':
        login()
    elif choice1 == '3':
        pass
        # cancel()
    else:
        print("没有您输入的选项！！")


if __name__ == '__main__':
    init()
